/*  File Name	: Configurator.h
 *  Author		: Pang Jiacai
 *	 E-mail		: 823960168@qq.com
 *  Created on	: 2012-6-30
 *  Description:
 */

#ifndef CONFIGURATOR_H_
#define CONFIGURATOR_H_

#include <string>
#include "json/json.h"
#include "Lock.h"

class Configurator
{
public:
	virtual ~Configurator();

	static Configurator *instance(void);

	void load_config(void);

	//int load_service_cfg(void);
	int load_daemon(void);
	int load_gateway(void);
	int load_engine(void);
	int load_dircserver(void);
	int load_dbserver(void);
	int load_chat(void);
	int load_sandbox(void);
	int load_sql_cfg(void);

	//const Json::Value &serivce_cfg(void);
	const Json::Value &daemon(void);
	const Json::Value &engine(void);
	const Json::Value &dircserver(void);
	const Json::Value &gateway(void);
	const Json::Value &dbserver(void);
	const Json::Value &chat(void);
	const Json::Value &sandbox(void);
	const Json::Value &sql_cfg(void);

private:
	Configurator();

	int load_json_file(const char *file,Json::Value &cfg);

private:
	static Configurator *instance_;
	RT_MUTEX rt_mutex;

	bool has_load_cfg_;
	Json::Reader json_reader_;

	Json::Value service_;
	Json::Value sql_;
	Json::Value gateway_;
	Json::Value engine_;
	Json::Value dircserver_;
	Json::Value dbserver_;
	Json::Value chat_;
	Json::Value sandbox_;
	Json::Value daemon_;
};

#define CONFIG_INSTANCE Configurator::instance()

#endif /* CONFIGURATOR_H_ */
